package com.xinchao.ck_mips.contract;

import android.support.annotation.StringRes;

import com.xinchao.ck_mips.base.BaseActivity;
import com.xinchao.ck_mips.http.CKRequestSubscriber;
import com.xinchao.ck_mips.http.CKResponse;
import com.xinchao.ck_mips.http.api.ApiService;
import com.xinchao.ck_mips.http.client.RetrofitClient;
import com.xinchao.ck_mips.utils.RequestUtils;
import com.xinchao.rxtools.rxhttp.tools.IDisposable;

import io.reactivex.Flowable;
import io.reactivex.disposables.Disposable;

/**
 * 基础契约
 */
public interface BaseContract {

    interface View {

        /**
         * 显示toast
         *
         * @param msg 需要展示的信息
         */
        void showToast(@StringRes int msg);

        /**
         * 在主线程中打印toast
         *
         * @param msg 需要打印的信息
         */
        void showToastOnUiThread(@StringRes int msg);

        /**
         * 显示toast
         *
         * @param msg 需要展示的信息
         */
        void showToast(String msg);

        /**
         * 在主线程中打印toast
         *
         * @param msg 需要打印的信息
         */
        void showToastOnUiThread(String msg);

        /**
         * 获取当前页面的activity
         *
         * @return activity
         */
        BaseActivity getBaseActivity();

        /**
         * 获取IDisposable
         */
        IDisposable getDisposable();

        void removeDisposable(Disposable disposable);

        /**
         * 获取配置的文本信息
         *
         * @param resId 资源id
         * @return 文本信息
         */
        String formatString(int resId, Object... params);
    }

    interface Presenter {

        default ApiService getService() {
            return RetrofitClient.getInstance().getApiService();
        }

        default <T> void request(Flowable<CKResponse<T>> flowable, CKRequestSubscriber<T> listener) {
            RequestUtils.request(flowable, listener);
        }
    }
}
